#pragma once
#include "common.h"

//单例模式 饿汉模式
class CentralCache
{
public:
    static CentralCache* GetInstance()
    {
        return &_sInstance;
    }
    //获取非空的span
    Span* GetOneSpan(SpanList& list, size_t size);

    //从central cache获取一定数量对象给thread  cache
    //start 和 end 为链表头尾， batchNum 对象数量 ， size 对象大小
    size_t FetchRangeObj(void*& start, void*& end, size_t batchNum, size_t size);
    void ReleaseListToSpan(void* start, size_t size);
private:
//central cache的桶是和thread cache的桶相对应的，如果thread cache中没有内存了
//就从central cache中对应桶的span中找
    SpanList _spanLists[FREE_LISTS];

    CentralCache(){}
    CentralCache(const CentralCache&) = delete;
    static CentralCache _sInstance;//声明
};